package cn.com.headfree.commworkflow.service;


import cn.com.headfree.commworkflow.dto.ApproveWorkFlowDto;
import cn.com.headfree.commworkflow.dto.WorkFlowConditionJSONData;
import cn.com.headfree.commworkflow.dto.WorkFlowNodeStatus;
import cn.com.headfree.commworkflow.model.TWorkFlowApprove;
import cn.com.headfree.commworkflow.model.TWorkFlowNodeApprove;
import com.gta.edu.sdk.base.service.IBaseService;
import com.gta.edu.sdk.common.dto.Page;
import com.gta.edu.sdk.mybatis.common.Entity;

import java.sql.SQLException;
import java.util.List;

/**
 * @description 工作流审批业务实现接口
 * @author fengya
 * @date 2015-8-6 上午09:18:04
 */
public interface IWorkFlowApproveService extends IBaseService<TWorkFlowApprove>{

	/**
	 * @description 保存审批记录  - 首次
	 * @author fengya
	 * @date 2015-9-9 下午02:32:56
	 * @param businessId
	 * @param workFlowId
	 * @throws SQLException
	 * @return boolean true:代表流程已经审批结束，false：代表流程进行中
	 */
	public TWorkFlowApprove saveApproveRecord(TWorkFlowApprove approve, String currentUserId, String approveAdvise, String token) throws SQLException;

	/**
	 * @description 保存审批记录 - 审批
	 * @author fengya
	 * @date 2015-9-9 下午02:32:56
	 * @param businessId
	 * @param workFlowId
	 * @throws SQLException
	 * @return boolean true:代表流程已经审批结束，false：代表流程进行中
	 */
	public boolean updateApproveRecord(TWorkFlowApprove approve, String currentUserId, String approveAdvise, String token) throws SQLException;

	/**
	 * @description 根据流程ID和审批者得到下个审批条件
	 * @author fengya
	 * @date 2015-8-6 上午09:19:52
	 * @param workFlowId
	 * @param approveId
	 * @return
	 * @return List<WorkFlowConditionJSONData>
	 */
	public List<WorkFlowConditionJSONData> getNextWorkFlowCondition(String approveId) throws SQLException;

	/**
	 * @description 根据流程ID
	 * @author fengya
	 * @date 2015-8-6 上午09:20:28
	 * @param workFlowId
	 * @param businessId
	 * @return
	 * @return WorkFlowNodeStatus
	 */
	public WorkFlowNodeStatus findWorkFlowNodes(String workFlowId, String businessId, String code);

	/**
	 * @description 根据业务ID获取该业务流程的所有审批记录
	 * @author fengya
	 * @date 2020年7月1日 下午7:22:13
	 * @param businessId
	 * @return
	 * List<ApproveRecordDto>
	 */
	public List<TWorkFlowNodeApprove> findApprovedRecord(String businessId);

	/**
	 * @description 得到审批的工作流信息
	 * @author fengya
	 * @date 2015-9-10 下午04:54:26
	 * @param page
	 * @param userId
	 * @param sort
	 * @return void
	 */
	public void findWaitApproveWorkFlow(Page<ApproveWorkFlowDto> page, String userId, String sysCode);

	/**
	 * @description 得到审批的工作流信息
	 * @author fengya
	 * @date 2015-9-10 下午04:54:26
	 * @param page
	 * @param userId
	 * @param sort
	 * @return void
	 */
	public void findApprovedWorkFlow(Page<ApproveWorkFlowDto> page, String userId, String sysCode);
//
//	/**
//	 * @description 根据节点ID得到改流程审批的路径，并进行修改流程中的线条颜色
//	 * @author fengya
//	 * @date 2015-9-28 下午01:37:41
//	 * @param nodeIds
//	 * @param flowId
//	 * @param code
//	 * @return void
//	 */
//	public WorkFlowJSONObject showNodeLoad(Set<String> nodeIds,String flowId,String code);

	List<TWorkFlowApprove> getApproveFlow(String workFlowId,String businessId);

	void deleteWorkFlowApprove(String id);
}
